<!DOCTYPE html>
<html>
	<head>
		<title>Documentation - Papa Parse</title>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, maximum-scale=1.0">
		<meta name="theme-color" content="#ffffff">
		<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css">
		<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Arvo|Source+Sans+Pro:400,400italic,700|Lato:300,400">
		<link rel="stylesheet" href="/resources/css/unsemantic.css">
		<link rel="stylesheet" href="/resources/css/tomorrow.highlight.css">
		<link rel="stylesheet" href="/resources/css/common.css">
		<script src="/resources/js/jquery.min.js"></script>
		<script src="/resources/js/highlight.min.js"></script>
		<script src="/resources/js/common.js"></script>
		<script>hljs.initHighlightingOnLoad();</script>
	</head>
	<body>

		<main>
			<header>
				<div class="grid-container">
					<div class="grid-40 mobile-grid-50">
						<div class="links">
							<a href="/demo">
								<i class="fa fa-magic fa-lg"></i> Demo
							</a>
							<a href="/docs">
								<i class="fa fa-book fa-lg"></i> Docs
							</a>
							<a href="/faq">
								<i class="fa fa-question fa-lg"></i> FAQ
							</a>
						</div>
					</div>
					<div class="grid-20 hide-on-mobile text-center">
						<a href="/" class="text-logo">Papa Parse 5</a>
					</div>
					<div class="grid-40 mobile-grid-50 text-right">
						<div class="links">
							<a href="https://github.com/mholt/PapaParse">
								<i class="fa fa-github fa-lg"></i> GitHub
							</a>
							<a href="http://stackoverflow.com/questions/tagged/papaparse">
								<i class="fa fa-stack-overflow fa-lg"></i> Help
							</a>
						</div>
					</div>
				</div>
			</header>

			<h1>Documentation</h1>

			<div class="grid-container">
				<div class="prefix-33 grid-33 suffix-33">
					<ol>
						<li>
							<a href="#csv-to-json">Convert CSV to JSON</a>
							<ul>
								<li><a href="#strings">Parse string</a></li>
								<li><a href="#local-files">Parse local file</a></li>
								<li><a href="#remote-files">Parse remote file</a></li>
								<li><a href="#jquery">Using jQuery to select files</a></li>
							</ul>
						</li>
						<li><a href="#json-to-csv">Convert JSON to CSV</a></li>
						<li><a href="#config">Config</a></li>
						<li>
							<a href="#results">Results</a>
							<ul>
								<li><a href="#data">Data</a></li>
								<li><a href="#errors">Errors</a></li>
								<li><a href="#meta">Meta</a></li>
							</ul>
						</li>
						<li><a href="#extras">Extras</a></li>
					</ol>
				</div>
			</div>


			<section>
				<div class="grid-container">

					<div class="grid-100">
						<h4 id="csv-to-json">Convert CSV to JSON</h4>

						<p>
							Delimited data can be parsed out of strings or files. Files that are parsed can be local or remote. Local files are opened with FileReader, and remote files are downloaded with XMLHttpRequest.
						</p>
					</div>


					<div class="grid-100">
						<h5 id="strings">Parse string</h5>
					</div>

					<div class="grid-50">
						<pre><code class="language-javascript">Papa.parse(csvString<i>[, <a href="#config">config</a>]</i>)</code></pre>
					</div>

					<div class="grid-50">
						<ul>
							<li><code>csvString</code> is a string of delimited text to be parsed.</li>
							<li><code>config</code> is an optional <a href="#config">config object</a>.</li>
							<li>Returns a <a href="#results">parse results</a> object (if not streaming or using worker).</li>
						</ul>
					</div>
					<div class="clear"></div>



					<div class="grid-100">
						<h5 id="local-files">Parse local files</h5>
					</div>

					<div class="grid-50">
						<pre><code class="language-javascript">Papa.parse(file, <a href="#config">config</a>)</code></pre>
					</div>

					<div class="grid-50">
						<ul>
							<li><code>file</code> is a <a href="https://developer.mozilla.org/en-US/docs/Web/API/File">File</a> object obtained from the DOM.</li>
							<li><code>config</code> is a <a href="#config">config object</a> which contains a callback.</li>
							<li>Doesn't return anything. Results are provided asynchronously to a callback function.</li>
						</ul>
					</div>
					<div class="clear"></div>


					<div class="grid-100">
						<h5 id="remote-files">Parse remote file</h5>
					</div>


					<div class="grid-50">
						<pre><code class="language-javascript">Papa.parse(url, {
	download: true,
	// rest of config ...
})</code></pre>
					</div>
					<div class="grid-50">
						<ul>
							<li><code>url</code> is the path or URL to the file to download.</li>
							<li>The second argument is a <a href="#config">config object</a> where <code>download: true</code> is set.</li>
							<li>Doesn't return anything. Results are provided asynchronously to a callback function.</li>
						</ul>
					</div>
					<div class="clear"></div>



					<div class="grid-100">
						<h5 id="jquery">Using jQuery to select files</h5>
					</div>

					<div class="grid-50">
						<pre><code class="language-javascript">$('input[type=file]').parse({
	config: {
		<span class="comment">// base <a href="#config">config</a> to use for each file</span>
	},
	before: function(file, inputElem)
	{
		<span class="comment">// executed before parsing each file begins;
		// what you return here controls the flow</span>
	},
	error: function(err, file, inputElem, reason)
	{
		<span class="comment">// executed if an error occurs while loading the file,
		// or if before callback aborted for some reason</span>
	},
	complete: function()
	{
		<span class="comment">// executed after all files are complete</span>
	}
});</code></pre>
					</div>
					<div class="grid-50">
						<ul>
							<li>Select the file input elements with files you want to parse.</li>
							<li>
								<code>before</code> is an optional callback that lets you inspect each file before parsing begins. Return an object like:
<pre><code class="language-javascript">{
	action: "abort",
	reason: "Some reason",
	config: <span class="comment">// altered config...</span>
}</code></pre>
								to alter the flow of parsing. Actions can be <code>"abort"</code> to skip this and all other files in the queue, <code>"skip"</code> to skip just this file, or <code>"continue"</code> to carry on (equivalent to returning nothing). <code>reason</code> can be a reason for aborting. <code>config</code> can be a modified <a href="#config">configuration</a> for parsing just this file.
							</li>
							<li>The <code>complete</code> callback shown here is executed after <i>all</i> files are finished and does not receive any data. Use the complete callback in <a href="#config">config</a> for per-file results.</li>
						</ul>
					</div>
					<div class="clear"></div>
				</div>
			</section>















			<section>
				<div class="grid-container">

					<div class="grid-100">
						<h4 id="json-to-csv">Convert JSON to CSV</h4>

						<p>
							Papa's <code>unparse</code> utility writes out correct delimited text strings given an array of arrays or an array of objects.
						</p>
					</div>

					<div class="grid-100">
						<h5 id="unparse">Unparse</h5>
					</div>


					<div class="grid-50">
						<pre><code class="language-javascript">Papa.unparse(data<i>[, <a href="#unparse-config-default">config</a>]</i>)</code></pre>
					</div>

					<div class="grid-50">
						<ul>
							<li>Returns the resulting delimited text as a string.</li>
							<li>
								<code>data</code> can be one of:
								<ul>
									<li>An array of arrays</li>
									<li>An array of objects</li>
									<li>An object explicitly defining <code>fields</code> and <code>data</code></li>
								</ul>
							</li>
							<li>
								<code>config</code> is an optional <a href="#unparse-config-default">config object</a>
							</li>
						</ul>
					</div>
					<div class="clear"></div>

				<div class="grid-100">
				<h5 id="unparse-config-default">Default Unparse Config with all options</h5>
				</div>

					<div class="prefix-25 grid-50 suffix-25">
					<pre><code class="language-javascript">
{
	quotes: false, //or array of booleans
	quoteChar: '"',
	escapeChar: '"',
	delimiter: ",",
	header: true,
	newline: "\r\n",
	skipEmptyLines: false, //other option is 'greedy', meaning skip delimiters, quotes, and whitespace.
	columns: null //or array of strings
}
					</code></pre>
				</div>

					<div class="clear"></div>

					<div class="grid-100">
						<h5>Unparse Config Options</h5>
					</div>

					<div class="grid-100" style="overflow-x: auto;">
						<table>
							<tr>
								<th style="width: 20%;">Option</th>
								<th style="width: 80%;">Explanation</th>
							</tr>
							<tr>
								<td>
									<code>quotes</code>
								</td>
								<td>
									If <code>true</code>, forces all fields to be enclosed in quotes. If an array of <code>true/false</code> values, specifies which fields should be force-quoted (first boolean is for the first column, second boolean for the second column, ...). A function that returns a boolean values can be used to determine the quotes value of a cell. This function accepts the cell value and column index as parameters. <br />
									Note that this option is ignored for <code>undefined</code>, <code>null</code> and <code>date-object</code> values. The option <code>escapeFormulae</code> also takes precedence over this.
								</td>
							</tr>
							<tr>
								<td><code>quoteChar</code></td>
								<td>
									The character used to quote fields.
								</td>
							</tr>
							<tr>
								<td><code>escapeChar</code></td>
								<td>
									The character used to escape <code>quoteChar</code> inside field values.
								</td>
							</tr>
							<tr>
								<td>
									<code>delimiter</code>
								</td>
								<td>
									The delimiting character. It must not be found in <a href="#readonly">Papa.BAD_DELIMITERS</a>.
								</td>
							</tr>
							<tr>
								<td>
									<code>header</code>
								</td>
								<td>
									If <code>false</code>, will omit the header row. If <code>data</code> is an array of arrays this option is ignored. If <code>data</code> is an array of objects the keys of the first object are the header row. If <code>data</code> is an object with the keys <code>fields</code> and <code>data</code> the <code>fields</code> are the header row.
								</td>
							</tr>
							<tr>
								<td>
									<code>newline</code>
								</td>
								<td>
									The character used to determine newline sequence. It defaults to <code>"\r\n"</code>.
								</td>
							</tr>
							<tr>
								<td>
									<code>skipEmptyLines</code>
								</td>
								<td>
									If <code>true</code>, lines that are completely empty (those which evaluate to an empty string) will be skipped. If set to <code>'greedy'</code>, lines that don't have any content (those which have only whitespace after parsing) will also be skipped.
								</td>
							</tr>
							<tr>
								<td>
									<code>columns</code>
								</td>
								<td>
									If <code>data</code> is an array of objects this option can be used to manually specify the keys (columns) you expect in the objects. If not set the keys of the first objects are used as column.
								</td>
							</tr>
							<tr>
								<td>
									<code>escapeFormulae</code>
								</td>
								<td>
									If <code>true</code>, field values that begin with <code>=</code>, <code>+</code>, <code>-</code>, or <code>@</code>, will be prepended with a <code>'</code> to defend against <a href="https://www.contextis.com/en/blog/comma-separated-vulnerabilities" target="_blank" rel="noopener">injection attacks</a>, because Excel and LibreOffice will automatically parse such cells as formulae.
								</td>
							</tr>
						</table>
					</div>
					<div class="clear"></div>

					<div class="grid-100">
						<h5 id="unparse-examples">Examples</h5>
					</div>

					<div class="grid-33">
						<pre><code class="language-javascript">// Two-line, comma-delimited file
var csv = Papa.unparse([
	["1-1", "1-2", "1-3"],
	["2-1", "2-2", "2-3"]
]);</code></pre>
					</div>

					<div class="grid-33">
						<pre><code class="language-javascript">// With implicit header row
// (keys of first object populate header row)
var csv = Papa.unparse([
	{
		"Column 1": "foo",
		"Column 2": "bar"
	},
	{
		"Column 1": "abc",
		"Column 2": "def"
	}
]);</code></pre>
					</div>

					<div class="grid-33">
						<pre><code class="language-javascript">// Specifying fields and data explicitly
var csv = Papa.unparse({
	"fields": ["Column 1", "Column 2"],
	"data": [
		["foo", "bar"],
		["abc", "def"]
	]
});</code></pre>
					</div>
					<div class="clear"></div>

				</div>
			</section>

















			<section>
				<div class="grid-container">

					<div class="grid-100">
						<h4 id="config">The Parse Config Object</h4>

						<p>
							The <code>parse</code> function may be passed a configuration object. It defines settings, behavior, and callbacks used during parsing. Any properties left unspecified will resort to their default values.
						</p>
					</div>

					<div class="grid-100">
						<h5 id="config-default">Default Config With All Options</h5>
					</div>


					<div class="prefix-25 grid-50 suffix-25">
						<pre><code class="language-javascript">{
	delimiter: "",	// auto-detect
	newline: "",	// auto-detect
	quoteChar: '"',
	escapeChar: '"',
	header: false,
	transformHeader: undefined,
	dynamicTyping: false,
	preview: 0,
	encoding: "",
	worker: false,
	comments: false,
	step: undefined,
	complete: undefined,
	error: undefined,
	download: false,
	downloadRequestHeaders: undefined,
	downloadRequestBody: undefined,
	skipEmptyLines: false,
	chunk: undefined,
	chunkSize: undefined,
	fastMode: undefined,
	beforeFirstChunk: undefined,
	withCredentials: undefined,
	transform: undefined,
	delimitersToGuess: [',', '\t', '|', ';', <a href="#readonly">Papa.RECORD_SEP</a>, <a href="#readonly">Papa.UNIT_SEP</a>]
}</code></pre>
					</div>
					<div class="clear"></div>

					<div class="grid-100">
						<h5 id="config-details">Config Options</h5>
					</div>

					<div class="grid-100" style="overflow-x: auto;">
						<table>
							<tr>
								<th style="width: 20%;">Option</th>
								<th style="width: 80%;">Explanation</th>
							</tr>
							<tr>
								<td>
									<code>delimiter</code>
								</td>
								<td>
									The delimiting character. Leave blank to auto-detect from a list of most common delimiters, or any values passed in through <code>delimitersToGuess</code>. It can be a string or a function. If string, it must be one of length 1. If a function, it must accept the input as first parameter and it must return a string which will be used as delimiter. In both cases it cannot be found in <a href="#readonly">Papa.BAD_DELIMITERS</a>.
								</td>
							</tr>
							<tr>
								<td>
									<code>newline</code>
								</td>
								<td>
									The newline sequence. Leave blank to auto-detect. Must be one of \r, \n, or \r\n.
								</td>
							</tr>
							<tr>
								<td>
									<code>quoteChar</code>
								</td>
								<td>
									The character used to quote fields. The quoting of all fields is not mandatory. Any field which is not quoted will correctly read.
								</td>
							</tr>
							<tr>
								<td>
									<code>escapeChar</code>
								</td>
								<td>
									The character used to escape the quote character within a field. If not set, this option will default to the value of <code>quoteChar</code>, meaning that the default escaping of quote character within a quoted field is using the quote character two times. (e.g. <code>"column with ""quotes"" in text"</code>)
								</td>
							</tr>
							<tr>
								<td>
									<code>header</code>
								</td>
								<td>
									If true, the first row of parsed data will be interpreted as field names. An array of field names will be returned in <a href="#meta">meta</a>, and each row of data will be an object of values keyed by field name instead of a simple array. Rows with a different number of fields from the header row will produce an error. Warning: Duplicate field names will overwrite values in previous fields having the same name.
								</td>
							</tr>
							<tr>
								<td>
									<code>transformHeader</code>
								</td>
								<td>
									A function to apply on each header. Requires <code>header</code> to be <code>true</code>. The function receives the header as its first argument and the index as second.<br>
									Only available starting with version 5.0.
								</td>
							</tr>
							<tr>
								<td>
									<code>dynamicTyping</code>
								</td>
								<td>
									If true, numeric and boolean data will be converted to their type instead of remaining strings. Numeric data must conform to the definition of a decimal literal. Numerical values greater than <code>2^53</code> or less than <code>-2^53</code> will not be converted to numbers to preserve precision. European-formatted numbers must have commas and dots swapped. If also accepts an object or a function. If object it's values should be a boolean to indicate if dynamic typing should be applied for each column number (or header name if using headers). If it's a function, it should return a boolean value for each field number (or name if using headers) which will be passed as first argument.
								</td>
							</tr>
							<tr>
								<td>
									<code>preview</code>
								</td>
								<td>
									If &gt; 0, only that many rows will be parsed.
								</td>
							</tr>
							<tr>
								<td>
									<code>encoding</code>
								</td>
								<td>
									The encoding to use when opening local files. If specified, it must be a value supported by the FileReader API.
								</td>
							</tr>
							<tr>
								<td>
									<code>worker</code>
								</td>
								<td>
									Whether or not to use a <a href="/faq#workers">worker thread</a>. Using a worker will keep your page reactive, but may be slightly slower.
								</td>
							</tr>
							<tr>
								<td>
									<code>comments</code>
								</td>
								<td>
									A string that indicates a comment (for example, "#" or "//"). When Papa encounters a line starting with this string, it will skip the line.
								</td>
							</tr>
							<tr>
								<td>
									<code>step</code>
								</td>
								<td>
									To <a href="/faq#streaming">stream</a> the input, define a callback function:
									<pre><code class="language-javascript">step: function(<a href="#results">results</a>, parser) {
	console.log("Row data:", results.data);
	console.log("Row errors:", results.errors);
}</code></pre>
									Streaming is necessary for large files which would otherwise crash the browser. You can call <code>parser.abort()</code> to abort parsing. And, except when using a <a href="/faq#worker">Web Worker</a>, you can call <code>parser.pause()</code> to pause it, and <code>parser.resume()</code> to resume.
								</td>
							</tr>
							<tr>
								<td>
									<code>complete</code>
								</td>
								<td>
									The callback to execute when parsing is complete. It receives the parse <a href="#results">results</a>. If parsing a local file, the <a href="https://developer.mozilla.org/en-US/docs/Web/API/File">File</a> is passed in, too:

									<pre><code class="language-javascript">complete: function(results, file) {
	console.log("Parsing complete:", results, file);
}</code></pre>
									When streaming, parse results are <i>not</i> available in this callback.
								</td>
							</tr>
							<tr>
								<td>
									<code>error</code>
								</td>
								<td>
									A callback to execute if FileReader encounters an error. The function is passed two arguments: the error and the File.
								</td>
							</tr>
							<tr>
								<td>
									<code>download</code>
								</td>
								<td>
									If true, this indicates that the string you passed as the first argument to <code>parse()</code> is actually a URL from which to download a file and parse its contents.
								</td>
							</tr>
							<tr>
								<td>
									<code>downloadRequestHeaders</code>
								</td>
								<td>
									If defined, should be an object that describes the headers, example:

 									<pre>
										<code class="language-javascript">downloadRequestHeaders: {
'Authorization': 'token 123345678901234567890',
}</code>
									</pre>
							</tr>
							<tr>
								<td>
									<code>downloadRequestBody</code>
								</td>
								<td>
									Use POST request on the URL of the download option. The value passed will be set as the body of the request.
								</td>
							</tr>
							<tr>
								<td>
									<code>skipEmptyLines</code>
								</td>
								<td>
									If true, lines that are completely empty (those which evaluate to an empty string) will be skipped. If set to <code>'greedy'</code>, lines that don't have any content (those which have only whitespace after parsing) will also be skipped.
								</td>
							</tr>
							<tr>
								<td>
									<code>chunk</code>
								</td>
								<td>
									A callback function, identical to step, which activates streaming. However, this function is executed after every <i>chunk</i> of the file is loaded and parsed rather than every row. Works only with local and remote files. Do not use both chunk and step callbacks together. For the function signature, see the documentation for the step function.
								</td>
							</tr>
							<tr>
								<td>
									<code>chunkSize</code>
								</td>
								<td>
									Overrides <code>Papa.LocalChunkSize</code> and <code>Papa.RemoteChunkSize</code>. See <a href="#configurable">configurable</a> section to know the usage of both parameters.
								</td>
							</tr>
							<tr>
								<td>
									<code>fastMode</code>
								</td>
								<td>
									Fast mode speeds up parsing significantly for large inputs. However, it only works when the input has no quoted fields. Fast mode will automatically be enabled if no <code>"</code> characters appear in the input. You can force fast mode either way by setting it to <code>true</code> or <code>false</code>.
								</td>
							</tr>
							<tr>
								<td>
									<code>beforeFirstChunk</code>
								</td>
								<td>
									A function to execute before parsing the first chunk. Can be used with chunk or step streaming modes. The function receives as an argument the chunk about to be parsed, and it may return a modified chunk to parse. This is useful for stripping header lines (as long as the header fits in a single chunk).
								</td>
							</tr>
							<tr>
								<td>
									<code>withCredentials</code>
								</td>
								<td>
									A boolean value passed directly into XMLHttpRequest's "withCredentials" property.
								</td>
							</tr>
							<tr>
								<td>
									<code>transform</code>
								</td>
								<td>
									A function to apply on each value. The function receives the value as its first argument and the column number or header name when enabled as its second argument. The return value of the function will replace the value it received. The transform function is applied before dynamicTyping.
								</td>
							</tr>
							<tr>
								<td>
									<code>delimitersToGuess</code>
								</td>
								<td>
									An array of delimiters to guess from if the <code>delimiter</code> option is not set.
								</td>
							</tr>
						</table>
					</div>
				</div>
			</section>























			<section>
				<div class="grid-container">

					<div class="grid-100">
						<h4 id="results">The Parse Result Object</h4>

						<p>
							A parse result always contains three objects: data, errors, and meta. Data and errors are arrays, and meta is an object. In the step callback, the data array will only contain one element.
						</p>
					</div>


					<div class="grid-100">
						<h5 id="results-structure">Result Structure</h5>
					</div>


					<div class="grid-50">
						<pre><code class="language-javascript">{
	data:   // array of parsed data
	errors: // array of errors
	meta:   // object with extra info
}</code></pre>
					</div>
					<div class="grid-50">
						<ul>
							<li><code>data</code> is an array of rows. If header is false, rows are arrays; otherwise they are objects of data keyed by the field name.</li>
							<li><code>errors</code> is an array of <a href="#errors">errors</a>.</li>
							<li><code>meta</code> contains extra information about the parse, such as delimiter used, the newline sequence, whether the process was aborted, etc. Properties in this object are not guaranteed to exist in all situations.</li>
						</ul>
					</div>
					<div class="clear"></div>


					<div class="grid-100">
						<h5 id="data">Data</h5>
					</div>


					<div class="grid-50">
						<pre><code class="language-javascript">// Example (header: false)
[
	["Column 1", "Column 2"],
	["foo", "bar"],
	["abc", "def"]
]

// Example (header: true)
[
	{
		"Column 1": "foo",
		"Column 2": "bar"
	},
	{
		"Column 1": "abc",
		"Column 2": "def"
	}
]</code></pre>
					</div>
					<div class="grid-50">
						<ul>
							<li>If header row is enabled and more fields are found on a row of data than in the header row, an extra field will appear in that row called <code>__parsed_extra</code>. It contains an array of all data parsed from that row that extended beyond the header row.</li>
						</ul>
					</div>
					<div class="clear"></div>

					<div class="grid-100">
						<h5 id="errors">Errors</h5>
					</div>


					<div class="grid-50">
						<pre><code class="language-javascript">// Error structure
{
	type: "",     // A generalization of the error
	code: "",     // Standardized error code
	message: "",  // Human-readable details
	row: 0,       // Row index of parsed data where error is
	<!--index: 0      // Character index within original input-->
}</code></pre>
					</div>
					<div class="grid-50">
						<ul>
							<li>The error <code>type</code> will be one of "Quotes", "Delimiter", or "FieldMismatch".</li>
							<li>The <code>code</code> may be "MissingQuotes", "UndetectableDelimiter", "TooFewFields", or "TooManyFields" (depending on the error type).</li>
							<!--<li><code>index</code> may not be available on all error messages because some errors are only generated after parsing is already complete.</li>-->
							<li>Just because errors are generated does not necessarily mean that parsing failed. The worst error you can get is probably MissingQuotes.</li>
						</ul>
					</div>
					<div class="clear"></div>

					<div class="grid-100">
						<h5 id="meta">Meta</h5>
					</div>


					<div class="grid-50">
						<pre><code class="language-javascript">{
	delimiter: // Delimiter used
	linebreak: // Line break sequence used
	aborted:   // Whether process was aborted
	fields:    // Array of field names
	truncated: // Whether preview consumed all input
}</code></pre>
					</div>
					<div class="grid-50">
						<ul>
							<li>Not all meta properties will always be available. For instance, <code>fields</code> is only given when header row is enabled.</li>
						</ul>
					</div>
					<div class="clear"></div>

				</div>
			</section>














			<section style="border-bottom: 0; padding-bottom: 0;">
				<div class="grid-container">

					<div class="grid-100">
						<h4 id="extras">Extras</h4>

						<p>
							There's a few other things that Papa exposes to you that weren't explained above.
						</p>
					</div>

					<div class="grid-100">
						<h5 id="readonly">Read-Only</h5>
					</div>


					<div class="grid-100">
						<table>
							<tr>
								<th>Read-Only Property</th>
								<th>Explanation</th>
							</tr>
							<tr>
								<td><code>Papa.BAD_DELIMITERS</code></td>
								<td>
									An array of characters that are not allowed as delimiters.
								</td>
							</tr>
							<tr>
								<td><code>Papa.RECORD_SEP</code></td>
								<td>
									The true delimiter. Invisible. ASCII code 30. Should be doing the job we strangely rely upon commas and tabs for.
								</td>
							</tr>
							<tr>
								<td><code>Papa.UNIT_SEP</code></td>
								<td>
									Also sometimes used as a delimiting character. ASCII code 31.
								</td>
							</tr>
							<tr>
								<td><code>Papa.WORKERS_SUPPORTED</code></td>
								<td>
									Whether or not the browser supports HTML5 Web Workers. If false, <code>worker: true</code> will have no effect.
								</td>
							</tr>
						</table>
					</div>


					<div class="grid-100">
						<h5 id="configurable">Configurable</h5>
					</div>


					<div class="grid-100">
						<table>
							<tr>
								<th>Configurable Property</th>
								<th>Explanation</th>
							</tr>
							<tr>
								<td><code>Papa.LocalChunkSize</code></td>
								<td>
									The size in bytes of each file chunk. Used when streaming files obtained from the DOM that exist on the local computer. Default 10 MB.
								</td>
							</tr>
							<tr>
								<td><code>Papa.RemoteChunkSize</code></td>
								<td>
									Same as LocalChunkSize, but for downloading files from remote locations. Default 5 MB.
								</td>
							</tr>
							<tr>
								<td><code>Papa.DefaultDelimiter</code></td>
								<td>
									The delimiter used when it is left unspecified and cannot be detected automatically. Default is comma.
								</td>
							</tr>
						</table>
					</div>

					<div class="clear"></div>

				</div>
			</section>

		</main>



		<footer>
			<!--<div class="footer-top">
				<h3>Make Your Papa Proud</h3>
				<h4><a href="https://github.com/mholt/PapaParse">Star</a> and <a href="https://github.com/mholt/PapaParse/blob/gh-pages/resources/js/lovers.js">shout</a> if you love #PapaParse</h4>
			</div>-->
			<div class="footer-main">
				<div class="grid-container">
					<div class="grid-40 text-center">
						<div class="logo">P</div>
						<br><br>
						Papa Parse by <a href="https://twitter.com/mholt6">Matt Holt</a>
						<br>
						&copy; 2013-2019
					</div>
					<div class="grid-15 mobile-grid-50 links">
						<h5>Learn</h5>
						<a href="/demo">Demo</a>
						<a href="/docs">Documentation</a>
						<a href="/faq">FAQ</a>
					</div>
					<div class="grid-15 mobile-grid-50 links">
						<h5>Project</h5>
						<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=S6VTL9FQ6L8EN&item_name=PapaParse&currency_code=EUR&source=url">Donate</a>
						<a href="https://github.com/mholt/PapaParse">GitHub</a>
						<a href="https://twitter.com/search?q=%23PapaParse">Share</a>
					</div>
					<div class="clear hide-on-desktop"></div>
					<div class="grid-15 mobile-grid-50 links">
						<h5>Download</h5>
						<a href="https://github.com/mholt/PapaParse/archive/master.zip">Latest (master)</a>
						<hr>
						<a href="https://github.com/mholt/PapaParse/blob/master/papaparse.min.js">Lil' Papa</a>
						<a href="https://github.com/mholt/PapaParse/blob/master/papaparse.js">Fat Papa</a>
					</div>
					<div class="grid-15 mobile-grid-50 links">
						<h5>Community</h5>
						<a href="https://twitter.com/search?q=%23PapaParse">Twitter</a>
						<a href="http://stackoverflow.com/questions/tagged/papaparse">Stack Overflow</a>
					</div>
				</div>
			</div>
		</footer>

	</body>
</html>
